<script>
  //打乱数组
  function shuffle(someArray) {
    // 你的代码
    let arr = [...someArray]
    return arr.sort(function () {
      return 0.5 - Math.random();
    })
  }
  //sort 回调函数形式
  /* 
  function (a,b){
    if(a>b)return 1
    if(a<b)return -1
    return 0
  }
  */

  console.log(shuffle([10, 12, 15])) // [12, 15, 10]

  //按示例合并数组
  // function mix(firstArray, secondArray) {
  //   // 你的代码
  //   let arr = [];
  //   let l = firstArray.length;
  //   if (firstArray.length < secondArray.length) {
  //     l = secondArray.length
  //   }
  //   for (var i = 0; i < l; i++) {
  //     if (i < firstArray.length) {
  //       arr.push(firstArray[i]);
  //     }
  //     arr.push(secondArray[i]);
  //   }
  //   return arr
  // }

  function mix(firstArray, secondArray) {
    let arr = [firstArray, secondArray]
    return arr
    return arr.reduce(function (a, item, index, Array) {
      if (Array[0].length < Array[1].length) {

      }

      return a
    }, [])
  }

  function mix(firstArray, secondArray) {
    const ret = [];
    const len = firstArray.length
      ;[...Array(len)].forEach((_, i) => {
        ret.push(firstArray[i])
        ret.push(secondArray[i])
      })
    return ret
  }

  console.log(mix([1, 2, 3], [4, 5, 6])) // [1, 4, 2, 5, 3, 6]
  console.log(mix(['h', 'a', 'c'], [7, 4, 17, 10, 48])) // ["h", 7, "a", 4, "c", 17, 10, 48]

  //按求和排序
  function orderBySum(someArray) {
    // 你的代码
    let arr = [...someArray]
    return arr.sort(function (a, b) {
      return (a[0] + a[1]) - (b[0] + b[1])
    })
  }

  console.log(
    orderBySum([
      [1, 3],
      [4, 2],
      [2, 1],
    ])
  ) // [[2,1], [1,3], [4,2]]

  //找到只出现一次的字符
  // indexOf
  // lastIndexOf
  // arr.indexOf('a') // 0
  // arr.lastIndexOf('a') // 3
  function findOddOneOut(someArray) {
    // 你的代码
    const arr = [...someArray];
    return arr.reduce(function (a, b) {
      if (arr.indexOf(b) === arr.lastIndexOf(b) && a.indexOf(b) === -1) { a.push(b); }
      return a
    }, [])
  }

  console.log(findOddOneOut(['a', 'a', 'b', 'a', 'c'])) // ['b', 'c']

  //找到数组的最小值和最大值
  function findSmallestAndLargestNumbers(someArray) {
    // 你的代码
    const arr = [];
    arr.push(Math.min.apply(null, someArray))
    arr.push(Math.max.apply(null, someArray))
    return arr.sort(function (a, b) {
      return a - b
    })
  }

  console.log(findSmallestAndLargestNumbers([14, 28, 3, 8, 2]))
  // [2, 28]

  // 按示例转换数组
  function splitByOddAndEven(someArray) {
    // 你的代码
    return [
      someArray.filter(n => n % 2 === 0),
      someArray.filter(n => n % 2 !== 0),
    ]
  }

  console.log(splitByOddAndEven([2, 3, 7, 6, 2, 4, 9]))
  // [[2, 4, 6], [3, 7, 9]]

  //只保留出现过一次的数据
  function onlyUnique(someArray) {
    // 你的代码
    const arr = someArray;
    return arr.reduce((a, b) => {
      if (arr.indexOf(b) === arr.lastIndexOf(b) && a.indexOf(b) === -1) { a.push(b); }
      return a
    }, [])
  }

  console.log(onlyUnique([1, 1, 2, 3, 3, 4, 4, 5])) // [2, 5]

  //数组排序按字母顺序（注意行也要排序）
  function alphabetize(someArray) {
    // 你的代码
    const fn = (a, b) => a > b ? 1 : (a === b ? 0 : -1)
    return someArray.map((arr) => {
      const arr2 = [...arr].sort(fn)
      return arr2
    }).sort(fn)
  }

  var jumbledAlphabet = [
    ['e', 'd', 'f'],
    ['a', 'c', 'b'],
    ['m', 'o', 'n'],
  ]
  console.log(alphabetize(jumbledAlphabet))
  // [["a", "b", "c"], ["d", "e", "f"], ["m", "n", "o"]]

  //找到两个数组里都出现的值
  function findCommonWords(firstArray, secondArray) {
    // 你的代码
    const arr = [...firstArray, ...secondArray];
    return arr.reduce(function (a, b) {
      if (arr.indexOf(b) !== arr.lastIndexOf(b) && a.indexOf(b) === -1) {
        a.push(b)
      }
      return a
    }, [])
  }


  function findCommonWords(firstArray, secondArray) {
    return firstArray.filter(a => secondArray.indexOf(a) > -1)

  }

  var firstArray = ['dog', 'cat', 'parrot']
  var secondArray = ['lizard', 'rat', 'cat']
  console.log(findCommonWords(firstArray, secondArray)) // ["cat"]

  //判断第一个数组是否包含第二个数组的所有元素
  function containsAllElements(firstArray, secondArray) {
    // 你的代码
    // return containsAllElements(firstArray, secondArray).length === secondArray.length
    //或
    return secondArray.every((a) => firstArray.indexOf(a) > -1)
  }

  console.log(containsAllElements(['monday', 'tuesday'], ['tuesday'])) // true

  //排序，数字在字母前
  function sortTheArray(someArray) {
    // 你的代码
    return [
      ...someArray.filter(item => typeof (item) === 'number').sort(),
      ...someArray.filter(item => typeof (item) === 'string').sort()
    ]
  }

  console.log(sortTheArray(['b', 6, 'a', 'q', 7, 2]))
  // [2, 6, 7, "a", "b", "q"]

  //用指定index取出数据成为新数组
  function buildArray(someArray, indexes) {
    // 你的代码
    // let arr = [];
    // let i, l;
    // for (i = 0; i < indexes.length; i++) {
    //   var j = indexes[i]
    //   for (l = 0; l < someArray.length; l++) {
    //     if (l === j) {
    //       arr.push(someArray[l])
    //     }
    //   }
    // }
    // return arr

    return indexes.map(index => someArray[index])
  }

  console.log(buildArray(['mon', 'tue', 'wed', 'thur', 'fri'], [1, 3, 4])) // ["tue", "thur", "fri"]
</script>